﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="IPoolMemberService.cs" company="">
//   
// </copyright>
// <summary>
//   The PoolMemberService interface.
// </summary>
// --------------------------------------------------------------------------------------------------------------------
namespace F5.BigIp.LocalTrafficManager.Interfaces
{
    using System.Collections.Generic;

    /// <summary>The PoolMemberService interface.</summary>
    public interface IPoolMemberService
    {
        #region Public Methods and Operators

        /// <summary>The get pool members.</summary>
        /// <param name="pool">The pool.</param>
        /// <returns>The <see cref="IEnumerable"/>.</returns>
        IEnumerable<IPoolMember> GetPoolMembers(IPool pool);

        /// <summary>Enable pool member.</summary>
        /// <param name="poolMember">The pool member.</param>
        void EnablePoolMember(IPoolMember poolMember);

        /// <summary>Disable pool member.</summary>
        /// <param name="poolMember">The pool member.</param>
        void DisablePoolMember(IPoolMember poolMember);

        /// <summary>Take pool member offline.</summary>
        /// <param name="poolMember">The pool member.</param>
        void ForcePoolMemberOffline(IPoolMember poolMember);

        /// <summary>The set monitor state.</summary>
        /// <param name="poolMember">The pool member.</param>
        /// <param name="enabled">The enabled.</param>
        void SetMonitorState(IPoolMember poolMember, bool enabled);

        /// <summary>The set session state.</summary>
        /// <param name="poolMember">The pool member.</param>
        /// <param name="enabled">The enabled.</param>
        void SetSessionState(IPoolMember poolMember, bool enabled);

        /// <summary>The get statistics.</summary>
        /// <param name="poolMember">The pool member.</param>
        /// <returns>The <see cref="PoolMemberStatistics"/>.</returns>
        PoolMemberStatistics GetStatistics(PoolMember poolMember);

        #endregion
    }
}